package com.cskaoyan.bytestream.in;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/*
        public int read()
       1. 从输入流中读取数据的下一个字节。
       2. 返回 0 到 255 范围内的 int 字节值。
       3. 如果因为已经到达流末尾而没有可用的字节，则返回值 -1

       public int read(byte[] b)
       1. 从输入流中读取一定数量的字节，并将其存储在缓冲区数组 b 中。
       2. 以整数形式返回实际读取的字节数(如果读取到了数据)
       3. 如果因为已经到达流末尾而不再有数据可用，则返回 -1

      // 仍然是从流中一次读取多个字节数据，
         通过off字节数组中数据存放的起始位置，len最多可以读取的字节数量
        public int read(byte[] b, int off, int len) (不重要)
        以整数形式返回实际读取的字节数(如果读取到了数据)，如果因为已经到达流末尾而不再有数据可用，则返回 -1
 */
public class Demo1Read {

    public static void main(String[] args) throws IOException {

        // 1. 创建InputStream对象
        InputStream is = new FileInputStream("a.txt");


        // 2. 使用read方法读取，文件中的数据

        // 1) public int read()  第一种方式，一次读取一个字节
//        int readByte;
//        while ((readByte = is.read()) != -1)  {
//            char c = (char) readByte;
//            System.out.print(c);
//        }


        // 2) public int read(byte[] b) 一次读取多个字节，并放入从0开始的存储单元
        // 这里的字节缓冲区，即我们的字节数组，习惯给1024,2048， 4096... ，1024的整数倍
//        byte[] bytes = new byte[1024];
//        int count = is.read(bytes);
//
//        // 字节数组  ——> 字符串
//        String s = new String(bytes, 0, count);
//        System.out.println(s);

        // 3) public int read(byte[] b, int off, int len) （不重要）
        byte[] byteBuf = new byte[1024];
        int off = 5;
        int len = byteBuf.length - off;
        int count = is.read(byteBuf, off, len);

        String s = new String(byteBuf, off, count);
        System.out.println(s);


        // 关闭流，释放资源
        is.close();
    }


}
